[Amazon FSx for NetApp ONTAP] SMBでファイルを開いているセッションを削除してみた
OSが固まってファイルのロックを開放できない
こんにちは、のんピ(@non____97)です。
皆さんはファイルサーバー上のファイルを操作している時、クライアントのOSが固まってファイルのロックを開放できない状況になったことはありますか? 私はあります。
ファイルのロックを開放できないと、他の利用メンバーがファイルを参照、更新できず、業務に支障が出ます。
そのような場合、ファイルサーバーの管理者としてはファイルロックを強制的に解除したい時があります。
Amazon FSx for NetApp ONTAP(以降FSxN)、およびAmazon FSx for Windows File Server(FSxW)には、クライアントからのSMBセッションおよびファイルをクローズすることができ、こちらの機能によって対応が可能です。
今回はFSxNで試してみたので、紹介します。
やってみた
検証環境
検証環境は以下のとおりです。
AD DCについては以下記事の検証で使用したものを流用します。
ドメインユーザーについては以下記事で作成したものを使用しています。
エクスプローラーでSMBファイル共有にアクセスした場合のセッション確認
それではまず、エクスプローラーでファイルを開いた場合から確認します。
SMBクライアントEC2インスタンスからtest-user01で、事前に作成したファイル共有share
にアクセスします。
アクセス後、ONTAP CLIからSMBセッションを確認することができました。
::> set diag
Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627 48s 1
10.0.0.34 CORP\test-user01 3
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118627
Connection ID: 1396824271
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.34
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\test-user01
UNIX User: pcuser
Open Shares: 1
Open Files: 3
Open Other: 0
Connected Time: 1m 8s
Idle Time: 52s
Protocol Version: SMB3_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: share
共有フォルダのMMCスナップインfsmgmt.msc
からも確認します。
AD DCにドメインのAdministratorでRDP接続し、タスクバーの検索ボックスに以下コマンドを入力して叩きます。
fsmgmt.msc /computer=SMB-SERVER.corp.non-97.net
以下のようにSMBサーバーに接続している現在のセッションを確認できます。
MMCスナップインでセッション情報を確認するためのセッションが張られているので、Administratorのセッションが追加されていますね。
ONTAP CLIでも確認できました。
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627 10m 45s 1
10.0.0.34 CORP\test-user01 3
1396824275 13794244183659118631 3s 1
10.0.0.139 CORP\ 0
Administrator
2 entries were displayed.
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118627
Connection ID: 1396824271
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.34
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\test-user01
UNIX User: pcuser
Open Shares: 1
Open Files: 3
Open Other: 0
Connected Time: 11m 51s
Idle Time: 11m 35s
Protocol Version: SMB3_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: share
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118632
Connection ID: 1396824276
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.139
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\Administrator
UNIX User: root
Open Shares: 1
Open Files: 0
Open Other: 0
Connected Time: 11s
Idle Time: 3s
Protocol Version: SMB3_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: ipc$
2 entries were displayed.
ただ、MMCスナップインの操作を数秒しないと、セッションから消えていました。操作するタイミングで都度セッションを張り直しているようです。
メモ帳でSMBファイル共有上のファイルを開いた場合のセッション確認
メモ帳でSMBファイル共有上のファイルを開いた場合のセッションを確認します。
開く前の状態は以下のとおりです。
メモ帳でファイルを開きます。
ONTAP CLIでセッションを確認します。
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627 6s 1
10.0.0.34 CORP\test-user01 4
::*> cifs session file show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection: 1396824271
Session: 13794244183659118627
Connection Count: 1
File File Open Hosting Continuously
ID Type Mode Volume Share Available
------- --------- ---- --------------- --------------------- ------------
15 Regular r vol_ntfs share No
Path: test.txt
::*> cifs session file show -instance
There are no entries matching your query.
::*> cifs session file show -instance
There are no entries matching your query.
数秒だけ開いているファイルの情報を確認できました。
その間もメモ帳は開いたままですが、ONTAP CLIからは確認できませんでした。MMCスナップインからも同様に確認はできませんでした。
ファイルの読み書きの通信が発生している間のみONTAP CLIやMMCスナップインで確認できるようです。
ファイルをメモ帳で開いている状態でセッションを削除
ファイルをメモ帳で開いている状態でセッションを削除してみます。
ONTAP CLIでSMBセッションを削除します。
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627 2m 48s 1
10.0.0.34 CORP\test-user01 3
::*> cifs session close -node FsxId0e64a4f5386f74c87-01 ?
[ -vserver <vserver name> ] Vserver (default: svm)
[-session-id] <integer> Session ID
[ -connection-id <integer> ] Connection ID
[[-lif-address] <IP Address>] Incoming Data LIF IP Address
[ -address <IP Address> ] Workstation IP address
[ -auth-mechanism <Authentication Mechanism> ] Authentication Mechanism
[ -windows-user <TextNoCase> ] Windows User
[ -unix-user <text> ] UNIX User
[ -protocol-version <CIFS Dialects> ] Protocol Version
[ -continuously-available <CIFS Open File Protection> ] Continuously Available
[ -is-session-signed {true|false} ] Is Session Signed
[ -smb-encryption-status {unencrypted|encrypted|partially-encrypted} ] SMB Encryption Status
::*> cifs session close -node FsxId0e64a4f5386f74c87-01 -session-id 13794244183659118627 -connection-id 1396824271
::*> cifs session show
This table is currently empty.
削除できました。
セッション削除後もファイルは問題なくメモ帳で開けています。
この状態でファイルに追記をして、上書き保存をします。
問題なくできました。
ONTAP CLIでセッションを確認すると、新規セッションが作成されていました。
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824280 13794244183659118636 3s 1
10.0.0.34 CORP\test-user01 1
ということで、セッションがなければ都度張り直してくれるようです。
メモ帳だけでなくワードパッドでも同様の挙動をしました。ただし、ここはアプリケーションによって挙動は異なると思うので過信は禁物です。
ファイルがロックされている場合の挙動の確認
管理者側でファイルを閉じることによる恩恵を感じたいので、ファイルがロックされている場合の挙動を確認します。
SMBクライアントEC2インスタンスにtest-user01を使ってRDP接続している環境にて、Powershellで以下コマンドを叩いてFileStreamを開いたままにします。
$filePath = "\\SMB-SERVER.corp.non-97.net\share\test.txt"
$fileStream = [System.IO.File]::Open($filePath, 'Open', 'Read', 'None')
これでファイルがロックされます。
試しにSMBクライアントEC2インスタンス上のtest-user01で、ロックしているファイルを開こうとするとThe process cannot access the file because it is being used by another process
と表示され、開くことができませんでした。
AD DCのドメインのAdministratorでも開こうとした際も同じメッセージが表示されます。
Powershellから開こうとしても同じメッセージが出力されました。
PS C:\Users\Administrator> cat \\SMB-SERVER.corp.non-97.net\share\test.txt
cat : The process cannot access the file '\\SMB-SERVER.corp.non-97.net\share\test.txt' because it is being used by
another process.
At line:1 char:1
+ cat \\SMB-SERVER.corp.non-97.net\share\test.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (\\SMB-SERVER.co...\share\test.txt:String) [Get-Content], IOException
+ FullyQualifiedErrorId : GetContentReaderIOError,Microsoft.PowerShell.Commands.GetContentCommand
この時のセッションやファイルの状態は以下のとおりです。
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824282 13794244183659118638 38s 1
10.0.0.34 CORP\test-user01 4
1396824283 13794244183659118639 8s 1
10.0.0.139 CORP\ 3
Administrator
2 entries were displayed.
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118638
Connection ID: 1396824282
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.34
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\test-user01
UNIX User: pcuser
Open Shares: 1
Open Files: 4
Open Other: 0
Connected Time: 5m 8s
Idle Time: 47s
Protocol Version: SMB3_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: share
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118639
Connection ID: 1396824283
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.139
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\Administrator
UNIX User: root
Open Shares: 1
Open Files: 3
Open Other: 0
Connected Time: 55s
Idle Time: 6s
Protocol Version: SMB3_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: share
2 entries were displayed.
::*> cifs session file show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection: 1396824282
Session: 13794244183659118638
Connection Count: 1
File File Open Hosting Continuously
ID Type Mode Volume Share Available
------- --------- ---- --------------- --------------------- ------------
5 Regular r vol_ntfs share No
Path: test.txt
::*> cifs session file show -instance
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
File ID: 5
Connection ID: 1396824282
Session ID: 13794244183659118638
Connection Count: 1
File Type: Regular
Open Mode: r
Aggregate Hosting File: aggr1
Volume Hosting File: vol_ntfs
CIFS Share: share
Path from CIFS Share: test.txt
Share Mode: -
Range Locks: 0
Continuously Available: No
Reconnected: No
FlexGroup MSID: 0
オープンしているファイルを確認できましたね。しばらく放置して再度コマンドを叩いた際も同様に表示されました。
MMCスナップインからでもtest-user01がtest.txtを開いていることが分かります。
MMCスナップインの方がユーザー名も一緒に確認できるので運用上、楽そうです。
ONTAP CLIの場合はセッションIDとコネクションIDからどのユーザーとのセッションなのか判断する一手間がかかります。
MMCスナップインでファイルをクローズ
MMCスナップインでファイルをクローズします。
ファイルクローズの確認ポップアップが表示されます。Yes
をクリックします。
ONTAP CLIを確認すると、ファイルをクローズしたため、オープンしているファイル一覧に表示されなくなりました。
::*> cifs session file show -instance
There are no entries matching your query.
このタイミングで、AD DCにドメインのAdministratorでRDP接続しているものからメモ帳でファイルを開けられるようになりました。
また、Powershellでもファイルを開くことができることを確認しました。
PS C:\Users\Administrator> cat \\SMB-SERVER.corp.non-97.net\share\test.txt
test
test2
ただし、PowershellでFileStreamを開いているEC2インスタンス上からはこちらのファイルを開くことはできませんでした。ドメインのAdministratorでRDP接続して開こうとしても開けません。別コンピューターである必要があるようです。
SMBセッションもクローズして変化があるのか確認します。
test-user01のセッションを削除します。
確認を求められるのでYes
をクリックします。
セッションのクローズがされました。
ただし、PowershellでFileStreamを開いているEC2インスタンス上からはこちらのファイルを開くことはできませんでした。ファイル操作をしている同一コンピューター上からはセッション削除をしても効果はないようですね。
以下コマンドでFileStreamを閉じることでファイル操作を行うことができるようになります。
$fileStream.Close()
ONTAP CLIでSMBセッションをクローズ
ONTAP CLIでSMBセッションのクローズができることも確認します。
再度以下コマンドを叩いて、ファイルをロックします。
$filePath = "\\SMB-SERVER.corp.non-97.net\share\test.txt"
$fileStream = [System.IO.File]::Open($filePath, 'Open', 'Read', 'None')
ONTAP CLIでファイルロックしているセッションをクローズします。
::*> cifs session file show -instance
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
File ID: 14
Connection ID: 1396824284
Session ID: 13794244183659118640
Connection Count: 1
File Type: Regular
Open Mode: r
Aggregate Hosting File: aggr1
Volume Hosting File: vol_ntfs
CIFS Share: share
Path from CIFS Share: test.txt
Share Mode: -
Range Locks: 0
Continuously Available: No
Reconnected: No
FlexGroup MSID: 0
::*> cifs session close -node FsxId0e64a4f5386f74c87-01 -session-id 13794244183659118640 -connection-id 1396824284
::*> cifs session file show -instance
There are no entries matching your query.
セッションクローズ後にAD DCからこちらのファイルを開こうとすると、問題なく開くことができました。
特定のユーザーが大量のファイルをつかんでいる場合は、そのユーザーのセッションごとクローズすれば問題なさそうです。
他ユーザーが永遠とロックしていてファイルを開くことができないというときに
Amazon FSx for NetApp ONTAPでSMBでファイルを開いているセッションを削除してみました。
他ユーザーが永遠とロックしていてファイルを開くことができないというときに役立ちそうですね。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!